From: Ian Campbell Date: Thu, 8 Jan 2015 10:57:47 +0000 (+0000) Subject: tools: libxl: directly initialise saved_* in _libxl_types.c X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~3943 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=03f15f8d602efd974d4c3507c7f780cd6efaec40;p=xen.git tools: libxl: directly initialise saved_* in _libxl_types.c Coverity complains: > /tools/libxl/_libxl_types.c: 9194 in libxl__device_channel_parse_json() > 9188 } > 9189 x = libxl__json_map_get("connection.socket", o, JSON_MAP); > 9190 if (x) { > 9191 libxl_device_channel_init_connection(p, LIBXL_CHANNEL_CONNECTION_SOCKET); > 9192 { > 9193 const libxl__json_object *saved_path = NULL; > >>> CID 1261758: Unused value (UNUSED_VALUE) > >>> Value from "x" is assigned to "saved_path" here, but that > >>> stored value is not used before it is overwritten. > 9194 saved_path = x; > 9195 x = libxl__json_map_get("path", x, JSON_STRING | JSON_NULL); > 9196 if (x) { > 9197 rc = libxl__string_parse_json(gc, x, &p->u.socket.path); > 9198 if (rc) > 9199 goto out; Which we can avoid by initialising saved_%s as we define it. Resulting in numerous instances of the generated code changing like this: if (x) { libxl_channelinfo_init_connection(p, LIBXL_CHANNEL_CONNECTION_PTY); { - const libxl__json_object *saved_path = NULL; - saved_path = x; + const libxl__json_object *saved_path = x; x = libxl__json_map_get("path", x, JSON_STRING | JSON_NULL); if (x) { rc = libxl__string_parse_json(gc, x, &p->u.pty.path); CID: 1261758, 1261759 (and I would have expected others, but not seeing them for some reason). Signed-off-by: Ian Campbell Acked-by: Wei Liu --- diff --git a/tools/libxl/gentypes.py b/tools/libxl/gentypes.py index 3e738215be..d9e14fde67 100644 --- a/tools/libxl/gentypes.py +++ b/tools/libxl/gentypes.py @@ -432,8 +432,7 @@ def libxl_C_type_parse_json(ty, w, v, indent = " ", parent = None, discrimina for f in [f for f in ty.fields if not f.const and not f.type.private]: saved_var_name = "saved_%s" % f.name s += "{\n" - s += " const libxl__json_object *%s = NULL;\n" % saved_var_name - s += " %s = x;\n" % saved_var_name + s += " const libxl__json_object *%s = x;\n" % saved_var_name if isinstance(f.type, idl.KeyedUnion): for x in f.type.fields: s += " x = libxl__json_map_get(\"%s\", %s, JSON_MAP);\n" % \